/**
 * 给定一个链表，两两交换其中相邻的节点，并返回交换后的链表。
  你不能只是单纯的改变节点内部的值，而是需要实际的进行节点交换。
  head = [1,2,3,4];  => head = [2,1,4,3];
 */

class ListNode {
  constructor(val, next) {
    this.val = val;
    this.next = next;
  }
}

// 双指针法加一个临时变量tmp
var swappairs = function (head) {
  let ret = new ListNode(0, head);
  tmp = ret;
  while (tmp.next && tmp.next.next){
    let cur = tmp.next.next;
    let pre = tmp.next;
    pre.next = cur.next;
    cur.next = pre;
    tmp.next = cur;
    tmp = pre;
  }
  return ret.next;
}